package br.com.it4.zmed.persistence;

import java.util.List;

import br.com.it4.framework.persistence.dao.BaseDAO;
import br.com.it4.framework.persistence.exception.PersistenceException;
import br.com.it4.zmed.entity.Atendimento;
import br.com.it4.zmed.filter.AtendimentoFilter;

/**
 * Interface do repositório para persistência básica para o atendimento.
 * 
 * @author Mozart Silva (mozart.vsilva@gmail.com)
 * 
 */
public interface AtendimentoDAO extends BaseDAO<Atendimento> {

    /**
     * Consulta a lista de atendimentos.
     * 
     * @param filtro
     *            Filtro para o atendimento.
     * @return A lista de atendimentos.
     * @throws PersistenceException
     *             Caso ocorra algum erro na execução.
     */
    public List<Atendimento> get(AtendimentoFilter filtro) throws PersistenceException;

    /**
     * Consulta um determinado número de atendimentos a partir do filtro.
     * 
     * @param filtro
     *            Filtro para o atendimento.
     * @param registroInicio
     *            O registro de inicio retornado.
     * @param registroFim
     *            O registro final retornado.
     * @return A lista de atendimentos.
     * @throws PersistenceException
     *             Caso ocorra algum erro na execução.
     */
    public List<Atendimento> get(AtendimentoFilter filtro, int registroInicio, int registroFim) throws PersistenceException;

    /**
     * Calcula o número de registros de atendimentos a partir pelo filtro.
     * 
     * @param filtro
     *            Filtro para o atendimento.
     * @return O número de registros encontrados.
     * @throws PersistenceException
     *             Caso ocorra algum erro na execução.
     */
    public Long getCount(AtendimentoFilter filtro) throws PersistenceException;

}